<?php

class Script extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		
		$this->load->model('ActionsDeCommunication/ActionDeCommunication');
		$this->load->model('ActionsDeCommunication/Forum');
	}
	
	public function index()
	{
		$this->checkBDD();
		$this->envoiMail();
	}
	
	private function checkBDD()
	{
		/* Pour les actions de communcation */
			// On récupère toutes les actions de communications dont la date est strictement inférieur à celle d'aujourd'hui.
		$CI = get_instance();
		$CI->load->database('db_adc', true);
		$resultat = $CI->db	->select(ActionDeCommunication::ID_ADC.','.ActionDeCommunication::DATE_ADC)
							->from(ActionDeCommunication::TABLE_ADC)
							->where('TO_DAYS('.ActionDeCommunication::DATE_ADC.') < TO_DAYS(NOW))')
							->get()
							->resultat_array();
		
		if(!empty($resultat))
		{
			foreach($resultat as $r)
			{
				$CI->db->set(ActionDeCommunication::ETAT_ADC, 4);
				$CI->db->where(ActionDeCommunication::ID_ADC.' = '.$r[0][ActionDeCommunication::ID_ADC]);
				$CI->db->update(ActionDeCommunication::TABLE_ADC);
			}
		}
		 
		/* Pour les forums */
		$resultat = $CI->db	->select(FORUM::ID_FORUMS.','.FORMS::DATE_FORUMS)
							->from(FORUM::TABLE_FORUM)
							->where('TO_DAYS('.FORMS::DATE_FORUMS.') < TO_DAYS(NOW))')
							->get()
							->resultat_array();
		
		if(!empty($resultat))
		{
			foreach($resultat as $r)
			{
				$CI->db->set(FORUM::ETAT_FORUM, 4);
				$CI->db->where(FORUM::ID_FORUM.' = '.$r[0][FORUM::ID_FORUM]);
				$CI->db->update(FORUM::TABLE_FORUM);
			}
		}
	}

	private function envoiMail()
	{
		/* Rappel à étudiant avant une adc */
		$delai = $this->getDelai("Rappel participation étudiants");
		
		$actions = ActionsDeCommunication::findAll(ActionDeCommunication::DATE_ADC.' IS NOT NULL AND TO_DAYS(NOW()) - TO_DAYS('.ActionDeCommunication::DATE_ADC.' = '.$delai);

		if(!empty($actions))
		{
			foreach($actions as $action)
			{
				$etudiants = ActionsDeCommunication::findEtudiant($actions->getId());
				
				foreach($etudiants as $etudiant)
				{
					$mail = new MailManager();
					$mail->setFileName('rappel_etudiant_adc');
					$mail->load();
					$information['action'] = $action;
					$information['etudiant'] = $etudiant;
					$mail->translate($information);
					$e = $mail->send($etudiant->getMail(), 'emmanuelle.graziano@univ-savoie.fr');
				}
			}
		}

		/* Rappel à professeur avant une adc */
		$delai = $this->getDelai("Rappel participation enseignants");
		
		$actions = ActionsDeCommunication::findAll(ActionDeCommunication::DATE_ADC.' IS NOT NULL AND TO_DAYS(NOW()) - TO_DAYS('.ActionDeCommunication::DATE_ADC.' = '.$delai);
		
		if(!empty($actions))
		{
			foreach($actions as $action)
			{
				$mail = new MailManager();
				$mail->setFileName('rappel_enseignant_adc');
				$mail->load();
				$information['action'] = $action;
				$mail->translate($information);
				$e = $mail->send($action->getEnseignant()->getMail(), 'emmanuelle.graziano@univ-savoie.fr');
			}
		}
		
		/* Rappelle etudiant remplir fiche ADC */
		$delai = $this->getDelai("Rappel fiche bilan étudiants");
		
		$CI = get_instance();
		$CI->load->database('db_adc', true);
		
		$resultats = $CI->db->select('a.'.ActionDeCommunication::ID_ADC)
							->from(ActionDeCommunication::TABLE_ADC.' a')
							->join(FicheAction::TABLE_FICHE_ACTION.' f', 'a.'.ActionDeCommunication::ID_ADC.' = f.'.FicheAction::ID_ADC_FICHE_ACTION, 'left')
							->where(ActionDeCommunication::ETAT_ADC.' = 4 AND '.FicheAction::ETAT_FICHE_ACTION.' IS NULL AND TO_DAYS(NOW()) - TO_DAYS('.ActionDeCommunication::DATE_ADC.') = '.$delai)
							->get()
							->result_array();	
		if(!empty($resultats))
		{
			foreach($resultats as $resultat)
			{
				$action = ActionDeCommunication::findById($resultat[ActionDeCommunication::ID_ADC]);
				
				$mail = new MailManager();
				$mail->setFileName('rappel_etudiant_ficheADC');
				$mail->load();
				$information['action'] = $action;
				foreach(ActionDeCommunication::findEtudiants($action->getId()) as $etudiant)
				{
					$information['etudiant'] = $etudiant;
					$mail->translate($information);
					$e = $mail->send($etudiant->getMail(), 'emmanuelle.graziano@univ-savoie.fr');
				}
			}
		}
		
		/*Rappel professeur remplir fiche bilan forum*/
		$delai = $this->getDelai('Rappel fiche bilan enseignants');
		
		$CI = get_instance();
		$CI->load->database('db_adc', true);
		
		$resultats = $CI->db->select('f.'.FORUM::ID_FORUM)
							->from(FORUM::TABLE_FORUM.' f')
							->join(FicheForum::TABLE_FICHE_FORUM.' fi', 'f.'.FORUM::ID_FORUM.' = fi.'.FicheForum::ID_FORUM_FICHE_FORUM, 'left')
							->where(FORUM::ETAT_FORUM.' = 4 AND '.FicheForum::ETAT_FICHE_FORUM.' IS NULL AND TO_DAYS(NOW()) - TO_DAYS('.FORUM::DATE_FORUM.') = '.$delai)
							->get()
							->result_array();
		if(!empty($resultats))
		{
			foreach($resultats as $resultat)
			{
				$forum = Forum::findById($resultat[FORUM::ID_FORUM]);
		
				$mail = new MailManager();
				$mail->setFileName('rappel_enseignant_fiche_bilan');
				$mail->load();
				$information['forum'] = $forum;
				$mail->translate($information);
				$e = $mail->send($forum->getEnseignant()->getMail(), 'emmanuelle.graziano@univ-savoie.fr');
			}
		}
		
		/* Envoi mail admin si manque de prof ou eleve à une adc */
		$delai = $this->getDelai('Rappel manque candidats administrateur');
		
		$actions = ActionsDeCommunication::findAll(ActionDeCommunication::DATE_ADC.' IS NOT NULL AND TO_DAYS(NOW()) - TO_DAYS('.ActionDeCommunication::DATE_ADC.' = '.$delai);
		
		if(!empty($actions))
		{
			foreach($actions as $action)
			{
				$mail = new MailManager();
				$mail->setFileName('rappel_etudiant_adc');
				$mail->load();
				$information['action'] = $action;
				$mail->translate($information);
				$e = $mail->send($etudiant->getMail(), 'emmanuelle.graziano@univ-savoie.fr');
			}
		}
	}
	
	private function getDelai($libelle)
	{
		$CI = get_instance();
		$CI->load->database('db_adc', true);
		
		$resultat = $CI->db	->select(PARAMETRE::VALEUR_PARAMETRE)
							->from(PARAMETRE::TABLE_PARAMETRE)
							->where(PARAMETRE::LIBELLE_PARAMETRE, $libelle)
							->limit(1)
							->get()
							->result_array();
		
		if(!empty($resultat))
		{
			return $resultat[0][PARAMETRE::VALEUR_PARAMETRE];
		}
		return 999;
	}
}
?>